#pragma once
#include<iostream>
#include<semaphore.h>

//// 封装信号量

namespace SemModule
{
	int defultsemval = 1;
	class Sem
	{
	public:
		Sem(int value = defultsemval)
			:_init_value(value)
		{
			// sem_init 1.指向初始化对象  2.指定信号量共享类型 0表示信号量用于同一进程 3.信号量初始值
			int n = ::sem_init(&_sem,0,_init_value);
			(void)n;
		}

		void P()
		{
			int n = ::sem_wait(&_sem);
			(void)n;
		}

		void V()
		{
			int n = ::sem_post(&_sem);
			(void)n;
		}

		~Sem()
		{
			int n = ::sem_destroy(&_sem);
			(void)n;
		}
	private:
		sem_t _sem; 
		int _init_value;
	};
};